﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using EC2011_hk1_BT6_1041326_1041337_1041373_1041448.DTO;
using EC2011_hk1_BT6_1041326_1041337_1041373_1041448.DAO;

namespace EC2011_hk1_BT6_1041326_1041337_1041373_1041448.BUS
{
    public class EmployeeBUS
    {
        #region Select
        /// <summary>
        /// Lấy tất cả các nhân viên.
        /// </summary>
        /// <returns></returns>
        public static List<EmployeeDTO> GetAll()
        {
            return EmployeeDAO.GetAll();
        }

        /// <summary>
        /// Lấy tất cả nhân viên của một phòng.
        /// </summary>
        /// <param name="departmentID">ID của phòng ban.</param>
        /// <returns></returns>
        public static List<EmployeeDTO> GetAllByDepartment(int departmentID)
        {
            return EmployeeDAO.GetAllByDepartment(departmentID);
        }

        /// <summary>
        /// Lấy tất cả nhân viên của một phòng.
        /// </summary>
        /// <param name="department">Phòng ban.</param>
        /// <returns></returns>
        public static List<EmployeeDTO> GetAllByDepartment(DepartmentDTO department)
        {
            return EmployeeDAO.GetAllByDepartment(department.DepartmentID);
        }

        /// <summary>
        /// Lấy ra một nhân viên.
        /// </summary>
        /// <param name="employeeID"></param>
        /// <returns></returns>
        public static EmployeeDTO GetEmployee(int employeeID)
        {
            return EmployeeDAO.GetEmployee(employeeID);
        }
        #endregion

        #region Insert
        /// <summary>
        /// Thêm một nhân viên.
        /// </summary>
        /// <param name="lastName">Họ.</param>
        /// <param name="firstName">Tên.</param>
        /// <param name="departmentID">ID của phòng ban.</param>
        /// <param name="salary">Mức lương.</param>
        /// <param name="hireDate">Ngày vào làm.</param>
        /// <param name="urlPersonalPhoto">Đường dẫn hình cá nhân.</param>
        /// <param name="description">Mô tả/Ghi chú.</param>
        /// <returns></returns>
        public static bool Insert(String lastName, String firstName, int departmentID, Decimal salary, DateTime hireDate, String urlPersonalPhoto, String description)
        {
            return EmployeeDAO.Insert(lastName, firstName, departmentID, salary, hireDate, urlPersonalPhoto, description);
        }
        #endregion

        #region Update
        /// <summary>
        /// Cập nhật nhân viên.
        /// </summary>
        /// <param name="lastName">Họ.</param>
        /// <param name="firstName">Tên.</param>
        /// <param name="departmentID">ID của phòng ban.</param>
        /// <param name="salary">Mức lương.</param>
        /// <param name="hireDate">Ngày vào làm.</param>
        /// <param name="urlPersonalPhoto">Đường dẫn hình cá nhân.</param>
        /// <param name="description">Mô tả/Ghi chú.</param>
        /// <param name="id">ID của nhân viên.</param>
        /// <returns></returns>
        public static bool Update(String lastName, String firstName, int departmentID, Decimal salary, DateTime hireDate, String urlPersonalPhoto, String description, int id)
        {
            return EmployeeDAO.Update(lastName, firstName, departmentID, salary, hireDate, urlPersonalPhoto, description,
                                      id);
        }

        /// <summary>
        /// Cập nhật nhân viên.
        /// </summary>
        /// <param name="employee">Nhân viên cần cập nhật.</param>
        /// <returns></returns>
        public static bool Update(EmployeeDTO employee)
        {
            return EmployeeDAO.Update(employee.LastName, employee.FirstName, employee.Department.DepartmentID,
                                      employee.Salary, employee.HireDate, employee.UrlPersonalPhoto,
                                      employee.Description, employee.EmployeeID);
        }
        #endregion

        #region Delete
        /// <summary>
        /// Xóa nhân viên.
        /// </summary>
        /// <param name="ids">Mảng ID của các nhân viên.</param>
        /// <returns>Số nhân viên đã xóa được.</returns>
        public static int Delete(int[] ids)
        {
            return EmployeeDAO.Delete(ids);
        }

        /// <summary>
        /// Xóa nhân viên.
        /// </summary>
        /// <param name="id">ID của nhân viên.</param>
        /// <returns>Số nhân viên đã xóa được.</returns>
        public static int Delete(int id)
        {
            int[] ids = new int[] { id };
            return EmployeeDAO.Delete(ids);
        }

        /// <summary>
        /// Xóa nhân viên.
        /// </summary>
        /// <param name="dto">DTO của nhân viên.</param>
        /// <returns>Số nhân viên đã xóa được.</returns>
        public static int Delete(EmployeeDTO dto)
        {
            int[] ids = new int[] { dto.Department.DepartmentID };
            return EmployeeDAO.Delete(ids);
        }

        /// <summary>
        /// Xóa nhân viên.
        /// </summary>
        /// <param name="list">Danh sách các nhân viên.</param>
        /// <returns>Số nhân viên đã xóa được.</returns>
        public static int Delete(List<EmployeeDTO> list)
        {
            int[] ids = new int[list.Count];
            for (int i = 0; i < list.Count; i++)
                ids[i] = list[0].Department.DepartmentID;
            return EmployeeDAO.Delete(ids);
        }
        #endregion
    }
}
